


"""

eval&json
eval:将字符串当做代码运行，然后返回结果
eval和json的区别
eval：把字符串当做代码来运行，json把字符串当数据转换
eval不安全（可能删除文件） json安全（只读数据，不运行）
eval

"""
from json import loads

#处理变量
a = 10
result = eval("a + 20 *3")
print(result)

#计算数学表达式
b = eval("10+10+30")
print(b)

#执行函数调用

c = eval("len('aaa')")
print(c)

"""

json:通用的数据格式 用于网页app之间传输数据
{"name":"小猫","age":12}
"""
import json

#字典转为json字符串：  dumps
#py中 字典可以使用单引号 js必须使用双引号 dumps会自动修改
data = {'name':"小猫",'age':12}
# 创建一个变量json_str接收json内置的函数dumps 将字典转为json字符串
json_str = json.dumps(data, ensure_ascii=False )
print(json_str)
print(type(json_str))

#json字符串转回py字典 loads

s = '{"name":"111","age":12}'
data1 = loads(s)
print(data1)
print(type(data1))

#存数据到文件(with) or 从文件读取数据
info = {'name':"小猫",'age':12}

with open('test.json','w',encoding='utf-8') as f:
    json.dump(info,f,ensure_ascii=False)

"""
open('test.json','w',encoding='utf-8') as f:
以w 写的模式打开或者创建一个文件（本地没有所以创建）'test.json'
并使用encoding指定了编码是utf-8的格式
 as f 将文件对象赋值给f
 with 执行完毕后文件自动关闭 即使过程中发生错误也能保证文件正常关闭 避免数据丢失
 ensure_ascii=False 中文正常显示
"""

#从文件读取数据

with open('test.json','r',encoding='utf-8') as f:
    info = json.load(f)
    print(info)